//////////////////////////////////////////////////////////////////////////

#ifndef _INPUTIMPL_H_
#define _INPUTIMPL_H_

//////////////////////////////////////////////////////////////////////////

#ifndef _OBSERVABLE_H_
#include "observable.h"
#endif

#ifndef _INPUT_H_
#include "input.h"
#endif

//////////////////////////////////////////////////////////////////////////

union SDL_Event;

//////////////////////////////////////////////////////////////////////////


/** Game input (keyboard and mouse) [SDL]
*
*  @author   Pasechnik Roman
*  @since    Nov 12th, 2009
*  @updated  Nov 12th, 2009
*/
class InputImpl : public Observable
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Constructor */
    InputImpl();


    /** Destructor */
    virtual ~InputImpl();


//////////////////////////////////////////////////////////////////////////


    /** Process input events */
    void ProcessInput();


    /** Get current key event */
    Input::Key GetKey() const;


    /** Get current mouse position */
    Input::MousePosition GetMousePosition() const;


//////////////////////////////////////////////////////////////////////////

private:

//////////////////////////////////////////////////////////////////////////


    /** Process SDL input event */
    void ProcessEvent( SDL_Event _event );


//////////////////////////////////////////////////////////////////////////


    /** Current key input event */
    Input::Key m_Key;


    /** Current mouse position */
    Input::MousePosition m_MousePosition;


//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
